﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GmFamilyService.h"
#include "MEPConnectorEnums.h"
#include "NdbObjectSchematic.h"
#include "NdbDataSchema.h"
#include "ICurve2d.h"
#include "IParameterCustomData.h"
#include "UniIdentity.h"

#define MEPCONNECTOR_CUSTOM_DATA_ID   L"MEPConnectorCustomDataId"

namespace gcmp
{
    /// \brief 连接件数据基类
    class GM_FAMILY_SERVICE_EXPORT IMepConnectorData : public NdbObjectSchematic
    {
        DEFINE_CAST_DERIVED(gcmp::IMepConnectorData, gcmp::NdbObjectSchematic);
    public:
        /// \brief 获取连接件类型
        /// \return MEPConnectorType 连接件类型
        virtual gfam::MEPConnectorType GetType() const = 0;
        
        /// \brief 获取名称
        /// \return std::wstring 名称
        virtual const std::wstring& GetName() const = 0;

        /// \brief 设置名称
        /// \param std::wstring 名称
        /// \return void
        virtual void SetName(const std::wstring& name) = 0;

        /// \brief 获取坐标系
        /// \return Coordinate3d 连接件的坐标系
        virtual const Coordinate3d& GetCoordinate() const = 0;

        /// \brief 设置坐标系
        /// \param coord 坐标系
        /// \return void
        virtual void SetCoordinate(const Coordinate3d& coord) = 0;

        /// \brief 获取连接件是否为Primary连接点
        /// \return bool 连接件是否为Primary连接点
        virtual bool GetIsPrimary() const = 0;

        /// \brief 设置连接件是否为Primary连接点
        /// \param bool 是否为Primary连接点
        /// \return void
        virtual void SetIsPrimary(bool isPrimary) = 0;

        /// \brief 获取连接件的系统类型
        /// \return gfam::ConnectorShapType 系统类型
        virtual gfam::ConnectorShapType GetShapeType() const = 0;

        /// \brief 设置连接件的系统类型
        /// \param gfam::ConnectorShapType 系统类型
        /// \return void
        virtual void SetShapeType(const gfam::ConnectorShapType& type) = 0;

        /// \brief 获取与之关联连接件数据在数据集中的索引
        /// \return int 关联的连接件数据在数据集中的索引
        virtual int GetLinkConnectorDataIndex() const = 0;

        /// \brief 设置与之关联连接件数据在数据集中的索引
        /// \param int 关联的连接件数据在数据集中的索引
        /// \return void
        virtual void SetLinkConnectorDataIndex(int index) = 0;

        /// \return OwnerPtr<IMEPConnectorData> 克隆的对象
        virtual OwnerPtr<IMepConnectorData> Clone() const = 0;

        /// \brief 比较两个连接件数据是否相等
        /// \param pOther 比较对象的指针
        /// \return bool 比较结果
        virtual bool HasSameValue(const IMepConnectorData* pOther) const = 0;

        /// \brief 比较自身数据是否小于另一个数据对象
        /// \param pOther 比较对象的指针
        /// \return bool 比较结果
        virtual bool IsLessThan(const IMepConnectorData* pOther) const = 0;

        /// \brief 获取ConnectionId
        /// \return Int32 ConnectionId
        virtual Int32 GetConnectionId() const = 0;

        /// \brief 设置ConnectionId
        /// \param Int32 ConnectionId
        /// \return void 
        virtual void SetConnectionId(Int32 connectionId) = 0;

        /// \brief 获取是否配对二维连接点
        /// \return bool 是否配对二维连接点
        virtual bool IsMatchConnector2d() const = 0;

        /// \brief 设置连接件是否配对二维连接点
        /// \param bool 是否配对二维连接点
        /// \return void
        virtual void SetIsMatchConnector2d(bool isMatchConnector2d) = 0;

        /// \brief 获取配对的二维连接点坐标系
        /// \return Coordinate3d 获取到的二维连接点坐标系
        virtual gcmp::Coordinate3d GetConnector2dCoordinate() const = 0;

        /// \brief 设置配对的二维连接点坐标系
        /// \param Coordinate3d 二维连接点坐标系
        /// \return void
        virtual void SetConnector2dCoordinate(const gcmp::Coordinate3d& coord) = 0;

        /// \brief 获得三维连接点存储的二维连接点表
        /// \return 参数映射表，Key为二维连接点的名字，Coordinate3d为二维连接点坐标系
        virtual const std::map<std::wstring, gcmp::Coordinate3d>& GetConnector2dCoordinates() const = 0;

        /// \brief 获得三维连接点存储的二维连接点表
        /// \return 参数映射表，Key为二维连接点的名字，Coordinate3d为二维连接点坐标系
        virtual std::map<std::wstring, gcmp::Coordinate3d>& GetConnector2dCoordinatesFW() = 0;

        /// \brief 设置三维连接点存储的二维连接点表
        /// \param connector2dCoordinates 三维连接点存储的二维连接点表
        /// \return 无
        virtual void SetConnector2dCoordinates(const std::map<std::wstring, gcmp::Coordinate3d>& connector2dCoordinates) = 0;
    };

    /// \brief 风管数据
    class GM_FAMILY_SERVICE_EXPORT IDuctConnectorData : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::IDuctConnectorData, gcmp::IMepConnectorData);
    public:
        /// \brief 创建一个默认的风管数据对象
        /// \return OwnerPtr<IVentilatingPipeConnectorData> 创建的对象
        static OwnerPtr<IDuctConnectorData> Create();

        /// \brief 获取连接件的流向类型，
        /// \return gfam::FlowDirectionType 结果可能为：双向、进、出
        virtual gfam::FlowDirectionType GetFlowDirection() const = 0;

        /// \brief 设置连接件的流向类型
        /// \param gfam::FlowDirectionType 传入的连接点流向类型值可能为：双向、进、出
        /// \return void
        virtual void SetFlowDirection(gfam::FlowDirectionType flowDirection) = 0;

        /// \brief 获取连接件在属性面板上是显示半径还是显示直径属性
        /// \return bool 如果返回true，就显示半径，否则显示直径
        virtual bool IsShowRadius() const = 0;

        /// \brief 设置连接件在属性面板上是显示半径还是显示直径属性
        /// \param bool 如果传入参数值为true，就显示半径；如果传入参数值为false，就显示直径
        /// \return void
        virtual void SetShowRadius(bool isShowRadius) = 0;

        /// \brief 获取内圆直径
        /// \return double 内圆直径
        virtual double GetDiameter() const = 0;

        /// \brief 设置内圆直径
        /// \param diameter 直径
        /// \return void 
        virtual void SetDiameter(double diameter) = 0;

        /// \brief 获取内圆直径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetDiameterBindingUid() const = 0;

        /// \brief 设置内圆直径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetDiameterBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取内圆半径
        /// \return double 内圆半径
        virtual double GetRadius() const = 0;

        /// \brief 设置内圆半径
        /// \param radius 半径
        /// \return void 
        virtual void SetRadius(double radius) = 0;

        /// \brief 获取内圆半径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetRadiusBindingUid() const = 0;

        /// \brief 设置内圆半径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetRadiusBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取角度
        /// \return double 角度
        virtual double GetAngle() const = 0;

        /// \brief 设置角度
        /// \param angle 角度
        /// \return void 
        virtual void SetAngle(double angle) = 0;

        /// \brief 获取角度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetAngleBindingUid() const = 0;

        /// \brief 设置角度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetAngleBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取风管系统类型
        /// \return gfam::VentilatingSystemType 风管系统类型
        virtual gfam::VentilatingSystemType GetSystemType() const = 0;

        /// \brief 设置风管系统类型
        /// \param systemType 风管系统类型
        /// \return void 
        virtual void SetSystemType(const gfam::VentilatingSystemType& systemType) = 0;

        /// \brief 获取矩形宽度
        /// \return double 矩形宽度
        virtual double GetRectWidth() const = 0;

        /// \brief 设置矩形宽度
        /// \param width 矩形宽度
        /// \return void 
        virtual void SetRectWidth(double width) = 0;

        /// \brief 获取矩形宽度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetRectWidthBindingUid() const = 0;

        /// \brief 设置矩形宽度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetRectWidthBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取矩形高度
        /// \return double 矩形高度
        virtual double GetRectHeight() const = 0;

        /// \brief 设置矩形高度
        /// \param height 矩形高度
        /// \return void 
        virtual void SetRectHeight(double height) = 0;

        /// \brief 获取矩形高度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetRectHeightBindingUid() const = 0;

        /// \brief 设置矩形高度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetRectHeightBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取椭圆宽度
        /// \return double 椭圆宽度
        virtual double GetEllipseWidth() const = 0;

        /// \brief 设置椭圆宽度
        /// \param majorAxis 椭圆宽度
        /// \return void 
        virtual void SetEllipseWidth(double majorAxis) = 0;

        /// \brief 获取椭圆宽度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetEllipseWidthBindingUid() const = 0;

        /// \brief 设置椭圆宽度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetEllipseWidthBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取椭圆高度
        /// \return double 椭圆高度
        virtual double GetEllipseHeight() const = 0;

        /// \brief 设置椭圆高度
        /// \param minorAxis 椭圆高度
        /// \return void 
        virtual void SetEllipseHeight(double minorAxis) = 0;

        /// \brief 获取椭圆高度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetEllipseHeightBindingUid() const = 0;

        /// \brief 设置椭圆高度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetEllipseHeightBindingUid(const UniIdentity& uid) = 0;
    };

    /// \brief 桥架数据
    class GM_FAMILY_SERVICE_EXPORT ICableTrayConnectorData : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::ICableTrayConnectorData, gcmp::IMepConnectorData);

    public:
        /// \brief 创建一个默认的桥架数据对象
        /// \return OwnerPtr<ICableTrayConnectorData> 创建的对象
        static OwnerPtr<ICableTrayConnectorData> Create();

        /// \brief 获取桥架系统类型
        /// \return gfam::CableTraySystemType 桥架系统类型
        virtual gfam::CableTraySystemType GetSystemType() const = 0;

        /// \brief 设置桥架系统类型
        /// \param systemType 桥架系统类型
        /// \return void
        virtual void SetSystemType(const gfam::CableTraySystemType& systemType) = 0;

        /// \brief 获取高度
        /// \return double 高度 
        virtual double GetHeight() const = 0;

        /// \brief 设置高度
        /// \param width 高度
        /// \return void 
        virtual void SetHeight(double height) = 0;

        /// \brief 获取高度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetHeightBindingUid() const = 0;

        /// \brief 设置高度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetHeightBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取宽度
        /// \return double 宽度
        virtual double GetWidth() const = 0;

        /// \brief 设置宽度
        /// \param width 宽度
        /// \return void 
        virtual void SetWidth(double width) = 0;

        /// \brief 获取宽度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetWidthBindingUid() const = 0;

        /// \brief 设置宽度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetWidthBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取角度
        /// \return double 角度
        virtual const double GetAngle() const = 0;

        /// \brief 设置角度
        /// \param angle 角度
        /// \return void 
        virtual void SetAngle(double angle) = 0;

        /// \brief 获取角度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetAngleBindingUid() const = 0;

        /// \brief 设置角度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetAngleBindingUid(const UniIdentity& uid) = 0;

    };

    /// \brief 电气数据
    class GM_FAMILY_SERVICE_EXPORT IElectricalConnectorData : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::IElectricalConnectorData, gcmp::IMepConnectorData);

    public:
        /// \brief 创建一个默认的电气数据对象
        /// \return OwnerPtr<IElectricalConnectorData> 创建的对象
        static OwnerPtr<IElectricalConnectorData> Create();

        /// \brief 获取电气系统类型
        /// \return gfam::ElectricalSystemType 电气系统类型
        virtual gfam::ElectricalSystemType GetSystemType() const = 0;

        /// \brief 获取角度
        /// \return double 角度
        virtual double GetAngle() const = 0;

        /// \brief 设置角度
        /// \param angle 角度
        /// \return void 
        virtual void SetAngle(double angle) = 0;

        /// \brief 获取角度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetAngleBindingUid() const = 0;

        /// \brief 设置角度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetAngleBindingUid(const UniIdentity& uid) = 0;

        /// \brief 设置电气系统类型
        /// \param systemType 电气系统类型
        /// \return void
        virtual void SetSystemType(const gfam::ElectricalSystemType& systemType) = 0;
    };

    /// \brief 水管数据
    class GM_FAMILY_SERVICE_EXPORT IPipeConnectorData : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::IPipeConnectorData, gcmp::IMepConnectorData);

    public:
        /// \brief 创建一个默认的水管数据对象
        /// \return OwnerPtr<IPipeConnectorData> 创建的对象
        static OwnerPtr<IPipeConnectorData> Create();

        /// \brief 获取连接件的流向类型，
        /// \return gfam::FlowDirectionType 结果可能为：双向、进、出
        virtual gfam::FlowDirectionType GetFlowDirection() const = 0;

        /// \brief 设置连接件的流向类型
        /// \param gfam::FlowDirectionType 传入的连接点流向类型值可能为：双向、进、出
        /// \return void
        virtual void SetFlowDirection(gfam::FlowDirectionType flowDirection) = 0;

        /// \brief 获取连接件在属性面板上是显示半径还是显示直径属性
        /// \return bool 如果返回true，就显示半径，否则显示直径
        virtual bool IsShowRadius() const = 0;

        /// \brief 设置连接件在属性面板上是显示半径还是显示直径属性
        /// \param bool 如果传入参数值为true，就显示半径；如果传入参数值为false，就显示直径
        /// \return void
        virtual void SetShowRadius(bool isShowRadius) = 0;

        /// \brief 获取内圆直径
        /// \return double 内圆直径
        virtual double GetDiameter() const = 0;

        /// \brief 设置内圆直径
        /// \param diameter 直径
        /// \return void 
        virtual void SetDiameter(double diameter) = 0;

        /// \brief 获取内圆直径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetDiameterBindingUid() const = 0;

        /// \brief 设置内圆直径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetDiameterBindingUid(const UniIdentity& uid) = 0;
       
        /// \brief 获取内圆半径
        /// \return double 内圆半径
        virtual double GetRadius() const = 0;

        /// \brief 设置内圆半径
        /// \param radius 半径
        /// \return void 
        virtual void SetRadius(double radius) = 0;

        /// \brief 获取内圆半径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetRadiusBindingUid() const = 0;

        /// \brief 设置内圆半径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetRadiusBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取角度
        /// \return double 角度
        virtual double GetAngle() const = 0;

        /// \brief 设置角度
        /// \param angle 角度
        /// \return void 
        virtual void SetAngle(double angle) = 0;

        /// \brief 获取角度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetAngleBindingUid() const = 0;

        /// \brief 设置角度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetAngleBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取水管系统类型
        /// \return gfam::WaterSystemType 水管系统类型
        virtual gfam::WaterSystemType GetSystemType() const = 0;

        /// \brief 设置水管系统类型
        /// \param systemType 水管系统类型
        /// \return void
        virtual void SetSystemType(const gfam::WaterSystemType& systemType) = 0;
    };
 

    /// \brief 线管数据
    class GM_FAMILY_SERVICE_EXPORT IConduitConnectorData : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::IConduitConnectorData, gcmp::IMepConnectorData);

    public:     

        /// \brief 创建一个默认的线管数据对象
        /// \return OwnerPtr<IConduitConnectorData> 创建的对象
        static OwnerPtr<IConduitConnectorData> Create();

        /// \brief 获取连接件在属性面板上是显示半径还是显示直径属性
        /// \return bool 如果返回true，就显示半径，否则显示直径
        virtual bool IsShowRadius() const = 0;

        /// \brief 设置连接件在属性面板上是显示半径还是显示直径属性
        /// \param bool 如果传入参数值为true，就显示半径；如果传入参数值为false，就显示直径
        /// \return void
        virtual void SetShowRadius(bool isShowRadius) = 0;

        /// \brief 获取直径
        /// \return double 直径
        virtual double GetDiameter() const = 0;

        /// \brief 设置直径
        /// \param diameter 直径
        /// \return void 
        virtual void SetDiameter(double diameter) = 0;

        /// \brief 获取直径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetDiameterBindingUid() const = 0;

        /// \brief 设置直径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetDiameterBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取半径
        /// \return double 半径
        virtual double GetRadius() const = 0;

        /// \brief 设置半径
        /// \param radius 半径
        /// \return void 
        virtual void SetRadius(double radius) = 0;

        /// \brief 获取半径绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetRadiusBindingUid() const = 0;

        /// \brief 设置半径绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetRadiusBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取角度
        /// \return double 角度
        virtual double GetAngle() const = 0;

        /// \brief 设置角度
        /// \param angle 角度
        /// \return void 
        virtual void SetAngle(double angle) = 0;

        /// \brief 获取角度绑定参数的uid
        ///
        /// 如果未绑定参数，则返回一个无效的uid
        /// \return UniIdentity 参数的uid
        virtual const UniIdentity& GetAngleBindingUid() const = 0;

        /// \brief 设置角度绑定参数的uid
        /// 
        /// 如果未绑定参数，可以设置一个无效的uid
        /// \param uid 参数的uid
        /// \return void 
        virtual void SetAngleBindingUid(const UniIdentity& uid) = 0;

        /// \brief 获取线管系统类型
        /// \return gfam::WireSystemType 线管系统类型
        virtual gfam::WireSystemType GetSystemType() const = 0;

        /// \brief 设置线管系统类型
        /// \param systemType 线管系统类型
        /// \return void
        virtual void SetSystemType(const gfam::WireSystemType& systemType) = 0;
    };


    /// \brief 机电连接件自定义数据类，保存文档中连接点信息
    class GM_FAMILY_SERVICE_EXPORT IMEPConnectorCustomDatas : public IParameterCustomData
    {
        DEFINE_CAST_DERIVED(gcmp::IMEPConnectorCustomDatas, gcmp::IParameterCustomData);

    public:
        /// \brief 创建机电连接件自定义数据
        /// \param connectorDatas 各个机电连接件数据的集合
        /// \return 机电连接件自定义数据
        static OwnerPtr<IMEPConnectorCustomDatas> Create(std::vector<OwnerPtr<IMepConnectorData>>&& connectorDatas);

        /// \brief 获取机电连接件数据的集合
        /// \return  机电连接件数据的集合
        virtual std::vector<OwnerPtr<IMepConnectorData>>& GetConnectorDatas() = 0;

        /// \brief 获取机电连接件数据的集合
        /// \return  机电连接件数据的集合
        virtual const std::vector<OwnerPtr<IMepConnectorData>>& GetConnectorDatas() const = 0;

        /// \brief 设置机电连接件数据的集合
        /// \param connectorDatas 机电连接件数据的集合
        /// \return bool 成功返回true，失败返回false
        virtual bool SetConnectorDatas(std::vector<OwnerPtr<IMepConnectorData>>&& connectorDatas) = 0;

        /// \brief 添加机电连接件数据
        /// \param connectorData 机电连接件数据
        /// \return bool 成功返回true，失败返回false
        virtual bool AddConnectorData(OwnerPtr<IMepConnectorData> connectorData) = 0;

    };

    /// \brief 二维连接点数据
    class GM_FAMILY_SERVICE_EXPORT IMepConnectorData2d : public IMepConnectorData
    {
        DEFINE_CAST_DERIVED(gcmp::IMepConnectorData2d, gcmp::IMepConnectorData);

    public:
        /// \brief 创建一个默认的对象
        /// \return OwnerPtr<IMepConnectorData2d> 创建的对象
        static OwnerPtr<IMepConnectorData2d> Create();

    };
}
